Personal computer systems are well known in the art. Personal computer systems in general, and IBM Personal Computers in particular, have attained widespread use for providing computer power to many segments of today's modern society. Personal computers can typically be defined as a desktop, floor-standing, or portable microcomputer that is comprised of a system unit having a single central processing unit (CPU) and associated volatile and non-volatile memory, including all RAM and BIOS ROM, a system monitor, a keyboard, one or more flexible diskette drives, a fixed disk storage device, and an optional printer. One of the distinguishing characteristics of these systems is the use of a mother board or system planar to electrically connect these components together. These systems are designed primarily to give independent computing power to a single user and are inexpensively priced for purchase by individuals or small business. Examples of such personal computer systems are IBM's PERSONAL COMPUTER AT and IBM's PERSONAL SYSTEM/2.
In computer systems, the components communicate via electrical signals. These electrical signals are typically carried by electrical connections between the system components. Typical types of electrical connections include metal traces on a printed circuit board, vias, plated through holes, plugs, and individual wires wrapped from pin to pin of system components. Typically groups of electrical signals and groups of electrical connections that carry the electrical signals are referred to as a "bus." Thus, a reference to a "bus" can indicate a reference to a group of electrical signals, a group of electrical connections that carry the electrical signals, or a reference to both a group of electrical signals that form a protocol and a group of electrical connections that carry the electrical signals. Systems can be said to have a variety of buses. A "local bus" is a bus which is, in general, synchronous with the microprocessor and designed to optimize the performance of the microprocessor. Most systems also have a "peripheral bus," which is either synchronous or asynchronous and may pass data at a slower frequency than the local bus. Peripheral buses typically have a number of interface slots, which are connectors that allow peripheral device cards to be pluggably connected to the peripheral bus. A typical peripheral bus is the peripheral controller interconnect (PCI) bus. Typically the peripheral bus is interfaced to the system local bus with a bus interface circuit (BIC). The BIC interfaces between the system local bus and the peripheral bus, handling any differences in bandwidth, managing control of the buses between busmasters, etc.
Additionally, more than one peripheral bus may be connected to each other.
Many systems also include one or more expansion buses, connected to the peripheral bus. These may also be either synchronous or asynchronous, and typically operate at a slower speed and narrower bandwidth than the peripheral bus. Examples of such expansion buses are IBM Micro Channel bus and ISA bus.
Personal computer systems are typically used to execute software to perform such diverse activities as word processing, manipulation of data via spread-sheets, collection and relation of data in databases, displays of graphics, design of electrical or mechanical systems using system design software, etc.
In these personal computer systems, read only memory (ROM), which is a type of non-volatile data storage device, is used for storing system initialization and boot code. ROM, or as it is sometimes referred to as read only storage (ROS), is a solid state device that allows preprogrammed data or machine code instructions to be retained while the computer is in a power off state and which allows a straight-forward and rapid access to the code once power is applied. For this reason, ROMs are used to store code sequences for the first access of a system processor. These code sequences are then used to test and initialize other portions of a computer system such as main memory, and then allow other programs such as operating systems, etc., to begin execution. This is normally referred to as booting or boot sequences. (It should be noted that ROMs are also sometimes used in other applications within a typical personal computer systems. However, the present invention is related to the use of ROMs that contain the processor's initialization or boot code. EPROM's and EEPROM's can also be used. Thus, unless the context dictates otherwise, the term "ROM" as used herein denotes the ROM, EPROM, or EEPROM containing the initialization code.)
In the early days of personal computer systems, architecture was relative simple and the location of the ROM chips containing the initialization code was dictated by the architecture and thus was located on the expansion local bus. At this point it should be noted that while the initialization code is stored in ROM, it is conventional practice to read the ROM into system memory which is volatile memory, often referred to as random access memory (RAM), since RAMs can operate at a much greater speed than ROMs for the execution of the code. However, as personal computer systems have become more complicated, especially in the IBM Personal System/1 and IBM Personal System/2 family, there is a multiplication of bus systems as indicated above with a multiplication of possible locations for the ROM containing the initialization instructions to be stored. For example, it is possible for the ROM to be located on the CPU local bus, or the ROM could be located directly on the peripheral bus or, as a third possibility, the ROM could be located on the expansion bus. It is the designer of the system who makes the choice as to where the ROM is to be located, and it will be located at only one of these locations. However, it is desirable that a single CPU configuration, programming and memory controller be usable irrespective of where the designer of a particular system chooses to locate the ROM.
There are advantages and disadvantages for the ROM containing the initialization instructions to be located at each of these various places, and hence there is a trade-off of advantages and disadvantages which is made by the system designer when determining where to locate the ROM containing the initialization code. The system designer for one system might choose to locate the ROM in one location, while for another system which is of a similar configuration but with different requirements, he or she may choose another location. As indicated above, there are advantages and disadvantages to each location.
For example, the ROM could be attached directly to the main system processor on the local bus. This would be desirable for a high reliability system such as a server which might use this location for ROM. This location would be chosen because the CPU local bus to ROM connection is the most direct, there being few or no devices between the ROM and the CPU. Thus, the ROM code will be accessible to the CPU even in the event of one or more failures elsewhere in the system. Hence, the CPU in executing the ROM code can diagnose and report almost any device failure within the system. However, there are some disadvantages to locating the ROM on the CPU local bus. One such disadvantage is that the highest performance processors now operate with bus speeds as high as 66 Mhz. ROMs typically do not operate at these speeds; therefore some amount of extra logic is usually required between the ROM and the local bus to compensate for this speed difference. Moreover, any attachments on such a high speed bus will tend to degrade system performance due to the increased number of loads on the high speed bus. Another disadvantage is that modern CPUs employ local bus data widths of 64 bits, while ROMs are typically 8 or 16 data bit widths. This requires even more logic to attach to the ROM.
The designer may choose to connect the ROM to the PCI or other intermediate peripheral bus. This choice might be beneficial for a system which is to be used as a desktop system. This attachment relieves some of the problems associated with attaching to the CPU local bus. For example, the PCI bus operates at a maximum of 33 Mhz, thus being less sensitive to performance degradation from additional attachments. Moreover, the PCI bus is typically limited to 32 bits data widths, thus reducing the amount of ROM interface logic required. The advantage of this attachment is that it still affords some degree of isolation of the CPU from the ROM since the PCI bus is not widely used for general purpose or customer-installed option attachments when there is one or more expansion bus. However, the disadvantage of this attachment is similar to that of the CPU local bus, except that the degree of the problem is reduced.
Lastly, the ROM can be located on the expansion bus, which generally may be Micro Channel architecture of the type used in certain IBM personal computers, namely, the IBM Personal System, PC's or an ISA bus. This connection is desirable to be used in the lowest cost personal computers since the ROM interface can be the simplest. This is because the ISA or Micro Channel bus both support 8-bit or 16-bit data widths directly and since the expansion bus speeds typically closely match the average speed of the low cost ROM devices. The disadvantage to this connection, of course, is that the ROM is furthest removed from the main processor, thus being susceptible to the failure of a large number of system components which would prevent its operation.
The problem presented to the architect of the memory controller is to allow the system to place the ROM in any one of these locations without having to provide a custom program or special hardware control for each location or require operator intervention for location selection. Expressed another way, the problem confronting the memory control architect is to provide a single CPU protocol or system which will allow the ROM chip having the initialization instructions to be located at any one of these three locations, i.e., on the local bus, on the PCI or equivalent bus or on the expansion bus, without having to modify the memory controller or the CPU.